const { AlignmentType } = require("docx");

// 对齐方式映射
const alignmentMap = {
    'left': AlignmentType.LEFT,
    'center': AlignmentType.CENTER,
    'right': AlignmentType.RIGHT,
    'justify': AlignmentType.JUSTIFIED,
    'distribute': AlignmentType.DISTRIBUTE
};

// 获取对齐方式
function getAlignment(alignment) {
    if (!alignment) return AlignmentType.LEFT;
    
    // 处理缩进格式，如 "indent-0", "indent-1" 等
    if (alignment.startsWith('indent-')) {
        return AlignmentType.LEFT; // 缩进类型统一使用左对齐
    }
    
    return alignmentMap[alignment] || AlignmentType.LEFT;
}

// 获取缩进值
function getIndentValue(alignment, baseIndent = 0) {
    if (!alignment || !alignment.startsWith('indent-')) {
        return baseIndent;
    }
    
    const indentLevel = parseInt(alignment.replace('indent-', ''));
    if (isNaN(indentLevel)) return baseIndent;
    
    // 每个缩进级别为 360 twips (约 0.635cm)
    return baseIndent + (indentLevel * 360);
}

// 生成下划线文本
function generateUnderlineText(length = 20) {
    return ' '.padEnd(length, '_');
}
  
// 将CSS长度单位（如px, cm）转换为Twips
function convertLengthToTwips(length, defaultTwips = 2000) {
    if (typeof length === 'number') {
        return length * 567; // Assume number is in cm
    }

    if (typeof length !== 'string') {
        return defaultTwips;
    }

    const match = length.match(/^(\d+(?:\.\d+)?)\s*(px|cm|pt)?$/i);
    if (!match) {
        return defaultTwips;
    }

    const value = parseFloat(match[1]);
    const unit = match[2] ? match[2].toLowerCase() : 'px'; // 默认为px

    switch (unit) {
        case 'cm':
            return value * 567; // 1 cm = 567 Twips
        case 'pt':
            return value * 20; // 1 pt = 20 Twips
        case 'px':
            // 假设 96 DPI, 1 inch = 1440 Twips
            return (value / 96) * 1440; 
        default:
            return defaultTwips;
    }
}

// 前缀符号映射
const prefixSymbolMap = {
    'none': '',
    // 新需求：五个可选符号
    'dot_circle': '⏺ ',
    'star': '✧ ',
    'pointer': '☞ ',
    'arrow_curved': '⮚ ',
    'square': '⯀ ',
    // 兼容旧值
    'wing_dot': 'l ',
    'wing_triangle': 'n ',
    'bullet': '• ',
    'arrow': '→ ',
    'check': '✓ ',
    'diamond': '◆ ',
    'circle': '○ ',
    'triangle': '▶ ',
    'dot': '● ',
};

// 获取前缀符号
function getPrefixSymbol(symbol) {
    return prefixSymbolMap[symbol] || '';
}

// 获取需要使用的字体（用于 DOCX 导出）
function getPrefixFont(symbol) {
    if (symbol === 'wing_dot' || symbol === 'wing_triangle') {
        return 'Wingdings';
    }
    return 'SimSun';
}

// 将“字体大小”中文选项映射为 docx 的半点值（size 使用半点单位）
function mapFontSizeToHalfPoints(fontSizeLabel) {
    // docx TextRun size 单位是 half-points，例如 21 => 10.5pt
    switch (fontSizeLabel) {
        case '小二':
            return 36; // 18pt
        case '小四':
            return 24; // 12pt
        case '小五':
            return 18; // 9pt
        case '五号':
        default:
            return 21; // 10.5pt
    }
}

module.exports = {
    getAlignment,
    getIndentValue,
    generateUnderlineText,
    getPrefixSymbol,
    getPrefixFont,
    convertLengthToTwips,
    mapFontSizeToHalfPoints
}; 